home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / oldwp / Prefs / List.PAS < prev    next >
Pascal/Delphi Source File  |  1995-01-03  |  4KB  |  169 lines

  1. { create a new MyNode, initilising certain values }
  2. Function Add_Name;
  3. VAR
  4.     namenode : pMyNode;
  5.     strn     : STRPTR;
  6.  
  7. begin
  8.     namenode := AllocRemember(@RememberKey, sizeof(tMyNode), MEMF_CLEAR OR MEMF_PUBLIC);
  9.     namenode^.wi_Node.ln_Name := CStrConstPtrAR(@RememberKey, name);
  10.     namenode^.wi_Node.ln_Type := NT_USER;
  11.     namenode^.wi_Node.ln_Succ := NIL;
  12.     namenode^.wi_Node.ln_Pred := NIL;
  13.     namenode^.wi_Node.ln_Pri  := 0;
  14.     namenode^.wi_Cmd[0]       := CStrConstPtrAR(@RememberKey, '');
  15.     namenode^.wi_Cmd[1]       := CStrConstPtrAR(@RememberKey, '');
  16.     namenode^.wi_RexxCmd      := CStrConstPtrAR(@RememberKey, '');
  17.     namenode^.wi_RexxPort     := CStrConstPtrAR(@RememberKey, '');
  18.     namenode^.wi_HotKey       := CStrConstPtrAR(@RememberKey, '');
  19.     namenode^.wi_Priority     := 0;
  20.     namenode^.wi_Stack        := 4096;
  21.     namenode^.wi_Output       := CStrConstPtrAR(@RememberKey, '');
  22.     namenode^.wi_Type         := TYPE_SHELL;
  23.     AddHead(CurrentList, pNode(namenode));
  24.     add_name := namenode;
  25. end;
  26.  
  27. { Detach the list from the Listview gadget }
  28. Procedure DetachObjectList;
  29.  
  30. VAR 
  31.     Tag_Array : array[0..1] of tTagItem;
  32.  
  33. begin
  34.     Tag_Array[0].ti_Tag  := GTLV_Labels;
  35.     Tag_Array[0].ti_Data := $FFFFFFFF;
  36.     Tag_Array[1].ti_Tag  := TAG_END;
  37.     GT_SetGadgetAttrsA(gads[G_LV], Thewindow, NIL, @Tag_Array);
  38. end;
  39.  
  40. { disable list manipulation gadgets }
  41. Procedure DisableObjectGadgets(Disable : byte);
  42.  
  43. begin
  44.     DisableGadget(gads[G_B_TOP],     TheWindow, Disable);
  45.     DisableGadget(gads[G_B_UP],      TheWindow, Disable);
  46.     DisableGadget(gads[G_B_DOWN],    TheWindow, Disable);
  47.     DisableGadget(gads[G_B_BOTTOM],  TheWindow, Disable);
  48.     DisableGadget(gads[G_B_REMOVE],  TheWindow, Disable);
  49.     DisableGadget(gads[G_B_COPY],    TheWindow, Disable);
  50. end;
  51.  
  52. { Attach the list to the Listview gadget }
  53. Procedure AttachObjectList;
  54.  
  55. VAR 
  56.     Tag_Array : array[0..4] of tTagItem;
  57.  
  58. begin
  59.     Tag_Array[0].ti_Tag  := GTLV_Labels;
  60.     Tag_Array[0].ti_Data := LONG(CurrentList);
  61.     Tag_Array[1].ti_Tag  := GTLV_Top;      
  62.     Tag_Array[1].ti_Data := CurrentTop;
  63.     Tag_Array[2].ti_Tag  := GTLV_Selected; 
  64.     Tag_Array[2].ti_Data := CurrentOrd;
  65.     if currentord <> -1 then begin
  66.         Tag_Array[3].ti_Tag  := GTLV_MakeVisible; 
  67.         Tag_Array[3].ti_Data := CurrentOrd;
  68.     End else begin
  69.         Tag_Array[3].ti_Tag  := TAG_IGNORE; 
  70.         Tag_Array[3].ti_Data := 0;
  71.     End;
  72.     Tag_Array[4].ti_Tag  := TAG_END;
  73.     GT_SetGadgetAttrsA(gads[G_LV], TheWindow, NIL, @Tag_Array);
  74. end;
  75.  
  76. { sort the list using a bubble sort }
  77. Procedure SortGadgetFunc;
  78.  
  79. VAR
  80.     notfinished : Boolean;
  81.     first, second, tmpnode : pNode;
  82.     n,i :integer;
  83.  
  84. begin
  85.     IF CurrentList^.lh_Head^.ln_Succ <> NIL then begin
  86.         wl := pointer(rtLockWindow(TheWindow));
  87.         notfinished := true;
  88.         (* Detach object list *)
  89.         DetachObjectList;
  90.         tmpnode := currentlist^.lh_Head;
  91.         i := 0;
  92.         while tmpnode <> NIL do begin
  93.             tmpnode := tmpnode^.ln_Succ;
  94.             i := i + 1;
  95.         end;
  96.         i := i-2;
  97.  
  98.         (* Sort list (quick & dirty bubble sort) *)
  99.         while (notfinished) do begin
  100.  
  101.             (* Reset not finished flag *)
  102.             notfinished := FALSE;
  103.  
  104.             (* Get first node *)
  105.             first := currentlist^.lh_Head;
  106.             if first <> NIL then begin
  107.                 n := 0;
  108.                 (* One bubble sort round *)
  109.                 second := first^.ln_Succ;
  110.                 while n <> i do begin
  111.  
  112.                     (* Compare *)
  113.                     n := n + 1;
  114.                     if (stricmp(first^.ln_Name,second^.ln_Name)>0) then begin
  115.                         (* Swap *)
  116.                         Remove(first);
  117.                         Insert_(CurrentList,first,second);
  118.                         notfinished := TRUE;
  119.                     end else
  120.                         (* Next *)
  121.                         first := second;
  122.                     second := first^.ln_Succ;
  123.                 end;
  124.             end;
  125.         end;
  126.         (* Reset pointers *)
  127.         CurrentNode := NIL;
  128.         CurrentOrd := -1;
  129.         CurrentTop := 0;
  130.  
  131.         (* Deactivate object gadgets *)
  132.         DisableObjectGadgets(TRUE_);
  133.  
  134.         (* Attach object list *)
  135.         AttachObjectList;
  136.         rtUnLockWindow(TheWindow, wl);
  137.     end;
  138. end;
  139.  
  140. { calculate the down value from a given across }
  141. Function CalcDown;
  142.  
  143. VAR
  144.     tmpnode : pNode;
  145.     o : integer;
  146.     down : integer;
  147.     tags : array[0..1] of tTagItem;
  148.  
  149. begin
  150.     DetachObjectList;
  151.     tmpnode := currentlist^.lh_Head;
  152.     o := -1;
  153.     while tmpnode <> NIL do begin
  154.         tmpnode := tmpnode^.ln_Succ;
  155.         o := o + 1;
  156.     end;
  157.     down := o div across;
  158.     while (down * across) < o do begin
  159.         down := down + 1;
  160.     end;
  161.     if (gad <> NIL) and (win <> NIL) then begin
  162.         tags[0].ti_Tag  := GTNM_Number;
  163.         tags[0].ti_Data := down;
  164.         tags[1].ti_Tag  := TAG_DONE;
  165.         GT_SetGadgetAttrsA(gad, Win, NIL, @tags);
  166.     End;
  167.     AttachObjectList;
  168.     calcdown := down; 
  169. end;